//
//  WXUserAccountViewModel.swift
//  WXWeiBo
//
//  Created by Angel-xin on 2016/09/22.
//  Copyright © 2016年 Angel-xin. All rights reserved.
//

import UIKit

// 封装授权页面的网络请求 -> 对应的视图是 WXOAuthViewController
class WXUserAccountViewModel: NSObject {

    static let sharedUserAccountViewModel: WXUserAccountViewModel = WXUserAccountViewModel()
    
    // 用户归档对象
    var userAccount: WXUserAccount? {
        
        // 从沙盒路径里面获取
        return WXUserAccount.loadUserAccount()
    }
    
    var isLogin: Bool {
        return accessToken != nil
    }
    
    // 判断 Accesstoken 是否过期
    var accessToken: String? {
        
        // 1.获取 access_token 属性
        let token = userAccount?.access_token
        
        // 2.获取 expiresDate 属性
        let expiresDate = userAccount?.expiresDate
        
        // 如果 token 存在,判断 AccessToken 是否过期
        if let t = token {
            
            // 表示 Accesstoken 不为 nil
            if expiresDate?.compare(Date()) == .orderedDescending {
                // 如果过期时间大于我们当前时间结果是降序方式
                return t
            } else {
                // 过期直接返回 nil
                return nil
            }
        }
        return nil
    }
    
    // 通过code获取accesstoken
    func requestAccesstoken(code: String, callBack: @escaping (Bool)->()) {
        
        WXNetworkingTools.sharedTools.requestAccessToken(code: code) { (response, error) in
            if error != nil {
                print("网络请求异常: \(error)")
                callBack(false)
                return
            }
            
            // 代码执行到此,网络请求成功
            guard let dic = response as? [String: Any] else {
                print("你是不是一个正确的字典格式")
                callBack(false)
                return
            }
            
            // 代码执行到此表示字典格式没有问题
            let userAccount = WXUserAccount(dic: dic)
            print(userAccount.access_token)
            // 获取用户信息
            self.requestUserInfo(userAccount: userAccount, callBack: callBack)
            
        }
    }
    
    // 根据accesskon和用户id获取用户信息
    private func requestUserInfo(userAccount: WXUserAccount, callBack: @escaping (Bool)->()) -> Void {
        
        WXNetworkingTools.sharedTools.requestUserInfo(accessToken: userAccount.access_token!, uid: userAccount.uid) { (response, error) in
            
            if error != nil {
                print("网络请求异常: \(error)")
                callBack(false)
                return
            }
            
            // 代码执行到此网络请求成功
            guard let dic = response as? [String: Any] else {
                print("不是一个正确的字典")
                callBack(false)
                return
            }
            
            let name = dic["name"]
            let profile_image_url = dic["avatar_large"]
            
            
            userAccount.name = name as? String
            userAccount.avatar_large = profile_image_url as? String
            
            print(userAccount.name)
            
            // 代码执行到此,表示用户登录成功
            userAccount.saveUserAccount()
            
            // 登录成功
            callBack(true)
            
        }
    }
    
}
